import {
  getSetting,
  openSetting,
  chooseAddress,
  requestPayment,
  showToast
} from "../../utils/asyncWx.js"
import {
  request
} from "../../ajaxUtil/request"
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address: [], //存收货信息 
    carts: [], //购物小车数据
    totalPrice: 0, //总价
    totalNum: 0 //总数量
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 获取购物车数据
    let carts = wx.getStorageSync('cars')
    // 获取当前选择的地址
    let address = wx.getStorageSync('address') || []
    // 计算支付金额
    this.setCarts(carts)
    this.setData({
      address
    })
  },
  // setCarts 
  // 计算商品总数量、商品总价
  setCarts: function (carts) {
    let totalNum = 0 //商品总数量
    let totalPrice = 0 //商品总价
    // 找到选中的商品数量，计算数量和总价
    carts.forEach(v => {
      if (v.checked) {
        totalNum += v.num // 商品总数量
        totalPrice += v.num * v.goods_price //商品总价
      }
    })
    this.setData({
      carts,
      totalNum,
      totalPrice
    })
  },
  // 获取用户的收货地址
  // wx.chooseAddress 接口
  handleAddressChoose: async function (e) {
    try {
      let address = await chooseAddress()
      //拼接地址
      address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo;
      //  将地址存入本地存储和this.data中
      wx.setStorageSync('address', address)
      this.setData({
        address
      })
    } catch (error) {
      console.log(error);
    }
  },
  //重新选择地址
  handleAddressChange: function (e) {
    this.handleAddressChoose()
  },
  /**
   *handlePay 在本应用 微信支付流程
   *A. 环境的准备
   *B. 微信支付流程 
   *1. 获取 token => openID 唯一标识  
   *接口：https://www.showdoc.cc/128719739414963?page_id=2612400282844951
   *2. 在系统中创建一个订单 
   *接口 ：https://www.showdoc.cc/128719739414963?page_id=2612148628877795
   *3. 获取支付参数
   *接口：https://www.showdoc.cc/128719739414963?page_id=2612486239891213
   *4. 发起支付  wx.requestPayment
   *https://developers.weixin.qq.com/miniprogram/dev/api/open-api/payment/wx.requestPayment.html
   *5. 查询是否支付成功
   *接口：https://www.showdoc.cc/128719739414963?page_id=2612723166377091
   *6. 把本地缓存中 carts 已经支付的商品 删除
   *7. 跳转到订单查询页面 /pages/order/index
   */

  // 处理微信支付的流程
  handlePay: async function (e) {
    try {
      // 1. 获取 token => openID 唯一标识  
      // 1.1 从本地存储获取
      let token = wx.getStorageSync('token')
      // 1.2 本地存储没有，则需要跳转去授权也让面获取token
      if (!token) {
        wx.navigateTo({
          url: '/pages/auth/index',
        })
      }
      // 2. 在系统中创建一个订单 
      // 2.1 拼接创建订单需要的请求参数
      let order_price = this.data.totalPrice;
      let consignee_addr = this.data.address.all;
      let goods = [];
      // 2.2 获取goods的参数列表
      this.data.carts.forEach(v => {
        if (v.checked) {
          let params = {}
          params["goods_id"] = v.goods_id;
          params["goods_number"] = v.num;
          params["goods_price"] = v.goods_price;
          goods.push(params);
        }
      })
      // 2.3 设置订单的请求参数
      let order_params = {
        order_price: order_price,
        consignee_addr: consignee_addr,
        goods: goods
      }
      // 2.4 创建订单
      const order= await request({
        header: {
          Authorization: wx.getStorageSync("token")
        },
        url: "/public/v1/my/orders/create",
        method: "post",
        data: order_params
      })
      let order_number=order.message.order_number
      // console.log(order_number);
      // 3. 获取支付参数
      const resPay = await request({
        header:{
          Authorization:wx.getStorageSync("token")
        },
        url: "/public/v1/my/orders/req_unifiedorder",
        method: "POST",
        data: {
          order_number
        }
      });
      const pay=resPay.message.pay
      // console.log(pay);
      // 4. 发起支付  wx.requestPayment
      //https://developers.weixin.qq.com/miniprogram/dev/api/open-api/payment/wx.requestPayment.html 
      //https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1
      await requestPayment(pay);
      // 5. 查询是否支付成功
      const result = await request({
        header:{
          Authorization:wx.getStorageSync("token")
        },
        url: "/public/v1/my/orders/chkOrder",
        method: 'post',
        data: {
          order_number
        }
      })
      //提示用户 支付成功
      await showToast({
        title:"支付成功"
      });
      // console.log(result);
      // 6. 把本地缓存中 carts 已经支付的商品 删除
      let newCarts=wx.getStorageSync('cars')
      // 找到本地存储中未选中的商品
      newCarts=newCarts.filter(v=>!v.checked)
      // 设置会本地缓存
      wx.setStorageSync('cars', newCarts)
      // 7. 跳转到订单查询页面 /pages/order/index
      wx.navigateTo({
        url: '/pages/order/index',
      })

    } catch (error) {
      // console.log(error);
      showToast({
        title:"支付失败"
      })
    }
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})